#!/bin/bash

export SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)

##
## Configuration Variables
##

config ()
{
    # A whitespace-separated list of executables that must be present and locatable.
    # These will each be installed through Homebrew if not found.
    : ${REQUIRED_TOOLS="cmake libssh2 libtool autoconf automake pkg-config"}

    export REQUIRED_TOOLS
}

##
## Bootstrap Process
##

main ()
{
    config

    local submodules=$(git submodule status)
    local result=$?

    if [ "$result" -ne "0" ]
    then
        exit $result
    fi

    if [ -n "$submodules" ]
    then
        echo "*** Updating submodules..."
        update_submodules
    fi

    if [ -n "$REQUIRED_TOOLS" ]
    then
        echo "*** Checking dependencies..."
        check_deps
    fi
}

check_deps ()
{
    # Check if Homebrew is installed
    which -s brew
    local result=$?

    if [ "$result" -ne "0" ]
    then
        echo
        echo "Homebrew is not installed (http://brew.sh). You will need to manually ensure the following tools are installed:"
        echo "  $REQUIRED_TOOLS"
        echo
        echo "Additionally, the following libssh2 files must be symlinked under /usr/local:"
        echo "  lib/libssh2.a include/libssh2.h include/libssh2_sftp.h include/libssh2_publickey.h"
        exit $result
    fi

    # Ensure that we have libgit2's dependencies installed.
    installed=`brew list`

    for tool in $REQUIRED_TOOLS
    do
        # Skip packages that are already installed.
        echo "$installed" | grep -q "$tool" && code=$? || code=$?

        if [ "$code" -eq "0" ]
        then
            echo "*** $tool is available"
            continue
        elif [ "$code" -ne "1" ]
        then
            exit $code
        fi

        echo "*** Installing $tool with Homebrew..."
        brew install "$tool"
    done

    brew_prefix=`brew --prefix`
    expected_prefix=/usr/local

    if [ "$brew_prefix" != "$expected_prefix" ]
    then
        echo "*** Adding soft links into $expected_prefix..."

        products=(lib/libssh2.a include/libssh2.h include/libssh2_sftp.h include/libssh2_publickey.h)

        for product in "${products[@]}"
        do
            destination="$expected_prefix/$product"
            if [ -e "$destination" ]
            then
                continue
            fi

            sudo mkdir -p "$(dirname "$destination")"
            sudo ln -s "$brew_prefix/$product" "$destination"
        done
    fi
}

bootstrap_submodule ()
{
    local bootstrap="script/bootstrap"

    if [ -e "$bootstrap" ]
    then
        echo "*** Bootstrapping $name..."
        "$bootstrap" >/dev/null
    else
        update_submodules
    fi
}

update_submodules ()
{
    git submodule sync --quiet && \
        git submodule update --init && \
        git submodule foreach --quiet bootstrap_submodule
}

export -f bootstrap_submodule
export -f update_submodules

main
